#ifndef __VTOR_TIMER_H__
#define __VTOR_TIMER_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "vtor_elec_module_config.h"

#ifdef __VTOR_TIMER__

#define VTOR_TIMER_STATE_STOP			0
#define VTOR_TIMER_STATE_START			1
#define VTOR_TIMER_STATE_WAITING		2
#define VTOR_TIMER_STATE_READY			3
#define VTOR_TIMER_STATE_RUNNING		4

typedef void (*VtorTimerFun)(void);

typedef struct
{
	VtorTimerFun fun; // 将要执行的函数
	uint32_t interval;	// 当计次达到interval，执行fun函数
	uint8_t state;		// 状态
	uint32_t curTime;	// 当前计次
	uint32_t runCnt;		// 本函数运行次数
	uint32_t runTime;	// 完成本次任务耗时多久
}VtorTimer;



void VtorTimer_VoidFun(void);

// 实际任务运行
void VtorTimer_Schedule(void);
// 时间片运行
void VtorTimer_IncTick(uint32_t tick);
void VtorTimer_Init(void);

// 获取当前tick，分别是tick数与循环次数
uint32_t VtorTimer_GetTick(void);
uint32_t VtorTimer_GetCnt(void);

// 设置与获取当前任务头，由用户调用
void VtorTimer_SetArrayHeader(VtorTimer* header);
VtorTimer* VtorTimer_GetArrayHeader(void);

VtorTimer* VtorTimer_Create(VtorTimerFun fun, uint32_t interval);
VtorTimer* VtorTimer_Start(VtorTimerFun fun, uint32_t interval);
void VtorTimer_Stop(VtorTimerFun fun);
void VtorTimer_Delete(VtorTimerFun fun);

void VtorTimer_RunNow(VtorTimerFun fun);
VtorTimer* VtorTimer_GetRunningTimer(void);
VtorTimer* VtorTimer_GetTimerByFun(VtorTimerFun fun);


void VtorTimer_IncTickCallback(uint32_t tick);
void VtorTimer_DeleteCallback(VtorTimerFun fun);
void VtorTimer_CreateCallback(VtorTimerFun fun);

#endif // __VTOR_TIMER__

#ifdef __cplusplus
}
#endif

#endif
